package com.example.detectivedemo.domain.player;

import java.util.Optional;

/**
 * 玩家仓库接口
 * 定义玩家数据的持久化操作契约
 */
public interface PlayerRepository {
    
    /**
     * 创建新玩家
     * @param player 玩家对象
     * @return 创建成功的玩家对象
     */
    Player create(Player player);
    
    /**
     * 根据玩家ID查找玩家
     * @param playerId 玩家ID
     * @return 玩家对象，如果不存在则返回Optional.empty()
     */
    Optional<Player> findById(String playerId);
    
    /**
     * 根据用户名查找玩家
     * @param username 用户名
     * @return 玩家对象，如果不存在则返回Optional.empty()
     */
    Optional<Player> findByUsername(String username);
    
    /**
     * 更新玩家信息
     * @param player 玩家对象
     * @return 更新成功的玩家对象
     */
    Player update(Player player);
    
    /**
     * 删除玩家
     * @param playerId 玩家ID
     * @return 是否删除成功
     */
    boolean delete(String playerId);
    
    /**
     * 保存玩家当前状态
     * @param player 玩家对象
     * @return 是否保存成功
     */
    boolean savePlayerState(Player player);
    
    /**
     * 加载玩家状态
     * @param playerId 玩家ID
     * @return 玩家对象，如果不存在则返回Optional.empty()
     */
    Optional<Player> loadPlayerState(String playerId);
}